/**
 * 表单验证工具类
 */

/**
 * 验证手机号
 * @param {string} value 需要验证的值
 * @returns {boolean} 验证结果
 */
export function isValidPhone(value) {
  const reg = /^1[3-9]\d{9}$/
  return reg.test(value)
}

/**
 * 验证邮箱
 * @param {string} value 需要验证的值
 * @returns {boolean} 验证结果
 */
export function isValidEmail(value) {
  const reg = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return reg.test(value)
}

/**
 * 验证身份证号
 * @param {string} value 需要验证的值
 * @returns {boolean} 验证结果
 */
export function isValidIdCard(value) {
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
  return reg.test(value)
}

/**
 * 验证URL
 * @param {string} value 需要验证的值
 * @returns {boolean} 验证结果
 */
export function isValidUrl(value) {
  const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return reg.test(value)
}

/**
 * 验证是否为空
 * @param {any} value 需要验证的值
 * @returns {boolean} 验证结果
 */
export function isEmpty(value) {
  return value === '' || value === null || value === undefined
}

/**
 * 验证是否为数字
 * @param {any} value 需要验证的值
 * @returns {boolean} 验证结果
 */
export function isNumber(value) {
  return !isNaN(parseFloat(value)) && isFinite(value)
}

/**
 * 验证是否为整数
 * @param {any} value 需要验证的值
 * @returns {boolean} 验证结果
 */
export function isInteger(value) {
  return Number.isInteger(Number(value))
}

/**
 * 验证长度范围
 * @param {string} value 需要验证的值
 * @param {number} min 最小长度
 * @param {number} max 最大长度
 * @returns {boolean} 验证结果
 */
export function lengthRange(value, min, max) {
  return value.length >= min && value.length <= max
}

/**
 * 创建自定义校验规则
 * @param {Function} validator 自定义校验函数
 * @param {string} message 错误提示信息
 * @returns {Function} 校验函数
 */
export function createValidator(validator, message) {
  return (value) => {
    const valid = validator(value)
    return {
      valid,
      message: valid ? '' : message
    }
  }
}

export default {
  isValidPhone,
  isValidEmail,
  isValidIdCard,
  isValidUrl,
  isEmpty,
  isNumber,
  isInteger,
  lengthRange,
  createValidator
} 